package br.com.trimark.controller;

import java.util.List;

import javax.servlet.ServletContext;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.Validations;
import br.com.trimark.dao.impl.IUsuarioDao;
import br.com.trimark.pojo.Usuario;
import br.com.trimark.utils.exception.DataException;

@Resource
public class UsuarioController {
	
	private IUsuarioDao usuarioDao;
	private ServletContext context;
	private final Result result;
	private Validator validator;

	public UsuarioController(IUsuarioDao usuarioDao, ServletContext context, Result result, Validator validator) {
		this.usuarioDao = usuarioDao;
		this.context = context;
		this.result = result;
		this.validator = validator;
	}
	
	@Get
	@Path("/usuario/todos")
	public List<Usuario> list() {
        try {
			return usuarioDao.listaTodos();
		} catch (DataException e) {
			e.printStackTrace();
		}
        return null;
    }
	
	@Path("/usuario/cadastro")
	public void cadastro() {
		System.out.println("# cadastro");
	}
	
	@Post("/usuario/adicionar")
	public void adicionar(final Usuario usuario) {
		validator.checking(new Validations() {{
			if (that(usuario != null, "usuario", "usuario.vazio")) {
	            if (that(usuario.getNomeUsuario().length() > 0, "usuario.nome", "nome.vazio")) {
	            	if (that(!usuario.getLoginUsuario().isEmpty(), "usuario.login", "login.vazio")) {
	            		that(usuario.getLoginUsuario().length() < 15, "usuario.login", "login.grande");
	            	}
	            	if (that(!usuario.getSenhaUsuario().isEmpty(), "usuario.senha", "senha.vazio")) {
	            		that(usuario.getSenhaUsuario().length() >= 5, "usuario.senha", "senha.pequena");
	            	}
	            }
			}
        }});
		
        validator.onErrorUsePageOf(UsuarioController.class).cadastro();
		
        try {
			usuarioDao.adicionar(usuario);
		} catch (DataException e) {
			e.printStackTrace();
		}
		result.redirectTo(UsuarioController.class).list();
	}
	
}
